﻿
//////////////////////////////////////////////////////////////////////
// Глобальные переменные

&НаКлиенте
Перем ОбработчикИзмененияСостоянияАгента;

&НаКлиенте
Перем ОбработчикОкончанияУстановкиПрогрессивногоВебПриложения;

//////////////////////////////////////////////////////////////////////
// Обработчики команд

&НаКлиенте
Процедура Сохранить()
	
	РаботаСХранилищемОбщихНастроек.СохранитьРабочийКаталог(ПутьКРабочемуКаталогу);
	РаботаСХранилищемОбщихНастроек.СохранитьТекстКраткогоЗаголовкаПриложения(КраткийЗаголовок);
	
	КраткийЗаголовокИзменился = Ложь;
	Если ПолучитьКраткийЗаголовокПриложения() <> КраткийЗаголовок Тогда
		КраткийЗаголовокИзменился = Истина;
		УстановитьКраткийЗаголовокПриложения(КраткийЗаголовок);
	КонецЕсли;
	
	#Если Не МобильныйКлиент Тогда
	Если АгентДоступен Тогда
		ТекущееСостояние = АгентКлиентскогоПриложения.ПолучитьТекущееСостояние();
		Если АгентПодключен И (ТекущееСостояние = СостояниеАгентаКлиентскогоПриложения.Отключен Или КраткийЗаголовокИзменился) Тогда
			Если КраткийЗаголовок = "" Тогда
				ПоказатьПредупреждение(, НСтр("ru ='Для включения оповещений при закрытом приложении необходимо задать краткий заголовок приложения'", "ru"));
			Иначе
				АгентКлиентскогоПриложения.НачатьПодключение();
				АгентКлиентскогоПриложения.УстановитьНаименованиеПриложения(КраткийЗаголовок);
				Закрыть(Истина);
			КонецЕсли;
		ИначеЕсли НЕ АгентПодключен И ТекущееСостояние = СостояниеАгентаКлиентскогоПриложения.Подключен Тогда
			АгентКлиентскогоПриложения.НачатьОтключение();
			Закрыть(Истина);
		Иначе
			Закрыть(Истина);
		КонецЕсли;
	Иначе
		Закрыть(Истина);
	КонецЕсли;
	#КонецЕсли	

КонецПроцедуры

//////////////////////////////////////////////////////////////////////
// Обработчики событий формы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ПутьКРабочемуКаталогу = РаботаСХранилищемОбщихНастроек.ПолучитьРабочийКаталог();
	КраткийЗаголовок = РаботаСХранилищемОбщихНастроек.ПолучитьТекстКраткогоЗаголовкаПриложения();
	АгентДоступен = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	#Если Не МобильныйКлиент Тогда
		СистемИнфо = Новый СистемнаяИнформация();
		АгентДоступен = СистемаВзаимодействия.ИспользованиеДоступно()
			И (Не СистемИнфо.ТипПлатформы = ТипПлатформы.MacOS_x86)
			И (Не СистемИнфо.ТипПлатформы = ТипПлатформы.MacOS_x86_64);
	
	Если АгентДоступен Тогда
		Элементы.ОтображениеОповещенийПриЗакрытомКлиентскомПриложенииГруппа.Видимость = Истина;
		ОбработчикИзмененияСостоянияАгента = Новый ОписаниеОповещения("ПриИзмененииСостоянияАгента", ЭтотОбъект);
		АгентКлиентскогоПриложения.ПодключитьОбработчикИзмененияСостояния(ОбработчикИзмененияСостоянияАгента);
		ТекущееСостояние = АгентКлиентскогоПриложения.ПолучитьТекущееСостояние();
		АгентЗапущен = Не (ТекущееСостояние = СостояниеАгентаКлиентскогоПриложения.НеЗапущен);
		АгентПодключен = (ТекущееСостояние = СостояниеАгентаКлиентскогоПриложения.Подключен);
		ОбновитьЭлементыАгента();
	Иначе
		Элементы.ОтображениеОповещенийПриЗакрытомКлиентскомПриложенииГруппа.Видимость = Ложь;
	КонецЕсли;
    #КонецЕсли

	Если ПрогрессивноеВебПриложение.Поддерживается() Тогда
		Элементы.ОтображениеКакОтдельногоПриложенияГруппа.Видимость = Истина;
		ОбработчикОкончанияУстановкиПрогрессивногоВебПриложения = Новый ОписаниеОповещения("ПриОкончанииУстановкиПрогрессивногоВебПриложения", ЭтотОбъект);
		ПрогрессивноеВебПриложение.ПодключитьОбработчикОкончанияУстановки(ОбработчикОкончанияУстановкиПрогрессивногоВебПриложения);
		ПрогрессивноеВебПриложениеУстановлено = ПрогрессивноеВебПриложение.Установлено();
		Элементы.ПрогрессивноеВебПриложениеУстановлено.Доступность = Не ПрогрессивноеВебПриложениеУстановлено;
	Иначе
		Элементы.ОтображениеКакОтдельногоПриложенияГруппа.Видимость = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	#Если Не МобильныйКлиент Тогда
	Если АгентДоступен Тогда
		АгентКлиентскогоПриложения.ОтключитьОбработчикИзмененияСостояния(ОбработчикИзмененияСостоянияАгента);
	КонецЕсли;
    #КонецЕсли	

	Если ПрогрессивноеВебПриложение.Поддерживается() Тогда
		ПрогрессивноеВебПриложение.ОтключитьОбработчикОкончанияУстановки(ОбработчикОкончанияУстановкиПрогрессивногоВебПриложения);
	КонецЕсли;
	
КонецПроцедуры

//////////////////////////////////////////////////////////////////////
// Обработчики событий элементов управления

&НаКлиенте
Процедура ПутьКРабочемуКаталогуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	УстановитьПутьКРабочемуКаталогу();
КонецПроцедуры

&НаКлиенте
Асинх Процедура УстановитьПутьКРабочемуКаталогу()
	Подключено = Ждать ПодключитьРасширениеРаботыСФайламиАсинх();
	Если НЕ Подключено Тогда
		Ждать ПредупреждениеАсинх(НСтр("ru ='Данная возможность недоступна, так как не подключено расширение работы с файлами.'", "ru"));
	КонецЕсли;
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
	ДиалогОткрытияФайла.Заголовок = НСтр("ru ='Выбор каталога временного хранения файлов'", "ru");
	ВыбранныеФайлы = Ждать ДиалогОткрытияФайла.ВыбратьАсинх();
	Если НЕ ВыбранныеФайлы = Неопределено Тогда
		ПутьКРабочемуКаталогу = ВыбранныеФайлы[0];
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура УстановитеАгентОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	#Если Не МобильныйКлиент Тогда
	СтандартнаяОбработка = Ложь;
	АгентКлиентскогоПриложения.НачатьУстановку();
	#КонецЕсли	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииСостоянияАгента(Состояние, ДопПараметры) Экспорт
	#Если Не МобильныйКлиент Тогда
	ТекущееСостояние = АгентКлиентскогоПриложения.ПолучитьТекущееСостояние();
	АгентЗапущен = Не (ТекущееСостояние = СостояниеАгентаКлиентскогоПриложения.НеЗапущен);
	Если АгентЗапущен Тогда
		АгентПодключен = Истина;
	КонецЕсли;
	
	ОбновитьЭлементыАгента();
	#КонецЕсли	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьЭлементыАгента()
	#Если Не МобильныйКлиент Тогда
	ВерсияАктуальна = АгентКлиентскогоПриложения.ВерсияАктуальна();
	Элементы.АгентПодключен.Доступность = АгентЗапущен;
	Элементы.ОбновитеАгент.Видимость = АгентЗапущен И (Не ВерсияАктуальна);
	Элементы.УстановитеАгент.Видимость = Не АгентЗапущен;
	#КонецЕсли	
КонецПроцедуры

&НаКлиенте
Процедура ПриОкончанииУстановкиПрогрессивногоВебПриложения(Результат, ДопПараметры) Экспорт
	
	ПрогрессивноеВебПриложениеУстановлено = Результат;
	Элементы.ПрогрессивноеВебПриложениеУстановлено.Доступность = Не ПрогрессивноеВебПриложениеУстановлено;
	
КонецПроцедуры

&НаКлиенте
Процедура ПрогрессивноеВебПриложениеУстановленоПриИзменении(Элемент)

	ПрогрессивноеВебПриложениеУстановлено = Ложь;
	ПрогрессивноеВебПриложение.НачатьУстановку();
	
КонецПроцедуры
